#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
归档txt文件脚本：将当前文件夹下的txt文件加上日期后保存到归档目录

兼容系统：Windows / Linux / macOS
注意：直接复制文件的二进制内容，不改变原始编码
"""

import os
import shutil
from pathlib import Path
from datetime import datetime
import sys
import io

# 设置Windows控制台输出为UTF-8编码，避免中文乱码
if sys.platform == 'win32':
    try:
        sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding='utf-8', errors='replace', line_buffering=True)
        sys.stderr = io.TextIOWrapper(sys.stderr.buffer, encoding='utf-8', errors='replace', line_buffering=True)
    except Exception:
        pass


def archive_txt_files():
    """
    从源数据目录复制txt文件到归档目录（跨平台兼容）
    源目录: D:\Quant\quantdata\tdxexport
    目标目录: 当前目录的txt_archive子目录
    """
    # 源数据目录（通达信导出目录）
    source_dir = Path('D:/Quant/quantdata/tdxexport')
    
    # 当前脚本所在目录作为目标基础目录
    base_path = Path('D:\\Quant\\quantdata\\tdxexport\\')
    
    # 定义要备份的txt文件列表
    txt_files = [
        '行业板块.txt',
        '概念板块.txt',
        '地区板块.txt',
        '指数板块.txt',
        '风格板块.txt'
    ]
    
    # 获取今天的日期（格式：YYYY-MM-DD）
    date_str = datetime.now().strftime('%Y-%m-%d')
    
    # 创建归档目录（如果不存在）
    archive_dir = base_path / 'txt_archive'
    try:
        archive_dir.mkdir(exist_ok=True)
    except Exception as e:
        print(f"❌ 创建目录失败: {str(e)}")
        return False
    
    archived_count = 0
    
    for txt_file in txt_files:
        # 从源目录读取文件
        source_path = source_dir / txt_file
        
        if source_path.exists():
            # 生成新文件名：去掉.txt后缀，加上日期和.txt
            file_name_without_ext = txt_file.replace('.txt', '')
            new_filename = f"{file_name_without_ext}_{date_str}.txt"
            dest_path = archive_dir / new_filename
            
            try:
                # 使用二进制模式复制文件，不改变编码
                with open(source_path, 'rb') as src_file:
                    with open(dest_path, 'wb') as dst_file:
                        dst_file.write(src_file.read())
                
                print(f"✓ 归档: {txt_file} -> {new_filename}")
                print(f"  源: {source_path}")
                print(f"  目标: {dest_path}")
                archived_count += 1
            except Exception as e:
                print(f"❌ 归档失败: {txt_file} - {str(e)}")
        else:
            # 不是所有文件都必须存在，仅警告
            print(f"⚠ 未找到文件: {txt_file}")
    
    if archived_count > 0:
        print(f"\n【归档完成】共归档 {archived_count} 个txt文件到: {archive_dir}")
    else:
        print(f"\n【归档完成】但没有成功归档任何文件")
    
    return archived_count > 0


if __name__ == '__main__':
    try:
        success = archive_txt_files()
        exit(0 if success else 1)
    except KeyboardInterrupt:
        print("\n执行已中止")
        exit(130)
    except Exception as e:
        print(f"\n错误: {str(e)}")
        exit(1)
